package com.neuedu.corejava.ch2;

public class Operater {

	public static void main(String[] args) {
		String iString = "hello";
		if (iString instanceof String) {
			System.out.println("i的类型是字符串");
		}
		
		// 运算符号的优先级
		// 算术运算>比较运算>逻辑运算

		// 局部变量必须先初始化才能使用；
		// ++和--
		int k = 2;
		k += ++k - k-- * ++k;
		// 1.先算赋值符号的右边 2.运算级别高的先算 3.按照四则运算的顺序进行计算
		System.out.println(k);

		// +号运算符
		// 1.做数学运算 2.字符串连接
		// 数字+字符 = 数字+字符的编码索引值
		int m = 10;
		char c = '中';

		int n = m + c;
		System.out.println(n); // 计算结果为int类型

		String string = "" + m + c; // 字符串+任何的数值类，会把数值转换成数值字符串
		System.out.println(string);

		String string2 = m + c + "";
		System.out.println(string2); // 结果是string类型

		// 逻辑运算的结构都是boolean值，比较运算符的运算结构也是boolean值
		//对于复杂的表达式，要根据运算符号的优先级别进行拆分表达式，按照运算级别从低到高进行拆分
		//运算按优先级从高到低进行运算
		boolean b = m * m > c * c;
		b = m * (m + c) < c * c && m * m + c < c+c;
		System.out.println(b);

		//逻辑运算的短路
		//在进行逻辑或运算时可能出现短路现象，当有多个或运算进行串联时，
		//会从左到右进行运算，当左边任意一个表达式结果为真时，右边所有的运算都被短路
		//在进行逻辑与运算时可能出现短路现象，当有多个与运算进行串联时，
		//会从左到右进行运算，当左边任意一个表达式结果为假时，右边所有的运算都被短路
		if (2+3>0 || false) {
			System.out.println("大于0");
		}
		
		//byte,short和char 进行算术运算时，会自动转换为int类型再进行计算，它们的计算结果是int
		byte b1=12;
		short s1 = 14;		
		//b1=b1+b1; 算术运算后的结果是int类型，不能直接保存到byte类型中
		//s1=s1+s1; 算术运算后的结果是int类型，不能直接保存到short类型中
		//c1=c1+c1; 算术运算后的结果是int类型，不能直接保存到char类型中l1
		int i1 = 11;
		long l1 = 1234;
		//int i2 = i1+l1; long+int小范围的数据类型与大范围的数据类型进行算术运算，会先把小范围的数据自动转换为大范围的数据类型再进行计算
		l1=i1+l1;
		
		//强制类型转换
		//大范围的数据转换为小范围的数据需要进行类型强制转换，小数据类型 = （小数据类型）大数据类型，数据类型强制转换会导致精度损失，会把高数据位全部损失掉
		//如果是小数转整数会把小数全部损失掉
		
	}

}
